"IF" Statement that detects decimal input
I need to alert when a decimal is entered in the %Increase:
$User = Read-Host "Enter an alias"
$Increase = Read-Host "Enter % Increase"
$DecException = $Increase
$colitems = Get-Mailbox -identity $User | Select-object
IssueWarningQuota,ProhibitSendQuota,ProhibitSendReceiveQuota
FOREACH ($ColItem in $Colitems)
{
$Warning = ([string]$ColItem.IssueWarningQuota).split("K")[0]
$ProhibitSend = ([string]$ColItem.ProhibitSendQuota).split("K")[0]
$ProhibitSendReceive = ([string]$ColItem.ProhibitSendReceiveQuota).split("K")[0]
}
#Write-Host "Prohibit Send: $ProhibitSend"
#Write-Host "Prohibit Receive: $ProhibitReceive"
#Write-Host "Issue Warning: $Warning"
August 28th, 2012 2:02pm
On Tue, 28 Aug 2012 17:54:36 +0000, RJB90 wrote:
>
>
>I need to alert when a decimal is entered in the %Increase:
>
>$User = Read-Host "Enter an alias" $Increase = Read-Host "Enter % Increase" $DecException = $Increase $colitems = Get-Mailbox -identity $User | Select-object IssueWarningQuota,ProhibitSendQuota,ProhibitSendReceiveQuota
>
>FOREACH ($ColItem in $Colitems) { $Warning = ([string]$ColItem.IssueWarningQuota).split("K")[0] $ProhibitSend = ([string]$ColItem.ProhibitSendQuota).split("K")[0] $ProhibitSendReceive = ([string]$ColItem.ProhibitSendReceiveQuota).split("K")[0] } #Write-Host
"Prohibit Send: $ProhibitSend" #Write-Host "Prohibit Receive: $ProhibitReceive" #Write-Host "Issue Warning: $Warning"
How about:
$p = $increase.split(".")
if ($p.length -gt 1)
{
"decimal present in data"
}
I gotta say I've never seen the quotas dealt with in the way you're
doing it.
How about this instead?
$increase = read-host "Enter % Increase"
while (($increase.split(".")).length -gt 1)
{
"Value cannot cantain a decimal point!"
$increase = read-host "Enter % Increase"
}
$grow = 1.0 + ($increase/100)
$m = get-mailbox -identity $user -resultsize 1
$setmbx = $false
if ($m.issuewarningquota.isunlimited -eq $false)
{
$m.issuewarningquota = $m.issuewarningquota.value.tokb() * $grow
$setmbx = $true
}
if ($m.prohibitsendquota.isunlimited -eq $false)
{
$m.prohibitsendquota = $m.prohibitsendquota.value.tokb() * $grow
$setmbx = $true
}
if ($m.prohibitsendreceivequota.isunlimited -eq $false)
{
$m.prohibitsendreceivequota = $m.prohibitsendreceivequota.value.tokb()
* $grow
$setmbx = $true
}
if ($setmbx)
{
$m | set-mailbox
}
---
Rich Matheisen
MCSE+I, Exchange MVP
--- Rich Matheisen MCSE+I, Exchange MVP
Free Windows Admin Tool Kit Click here and download it now
August 28th, 2012 9:01pm
Can you help me with this:
DO {[int]$Increase = Read-Host "Enter % Increase"; $p = $increase.split(".")}
UNTIL ($p.length -gt 1)
This is the logic that i am trying to work with, I am not understanding what you posted. I need to detect when a user puts a decimal and kick back to say only whole numbers are permitted. When i am running my script i am having a "system.double" issue. I
am assuming that i am comparing a number with a string.
Error: Method invocation failed because [System.Double] doesn't contain a method named
'split'.
At line:1 char:19
+ $b = [int]$a.split <<<< (".")
+ CategoryInfo : InvalidOperation: (split:String) [], RuntimeExce
ption
+ FullyQualifiedErrorId : MethodNotFound
August 29th, 2012 3:54pm
On Wed, 29 Aug 2012 19:46:03 +0000, RJB90 wrote:
>Can you help me with this: DO {[int]$Increase = Read-Host "Enter % Increase"; $p = $increase.split(".")} UNTIL ($p.length -gt 1)
If you're going to cast "$Increase" and an integer you'll never have a
decimal point in it. If ".5" is entered you'll get a zero as the
value. If they enter ".7" you'll get a "1" as a value. And becasue
it's an integer you'll never get "split" to work since that's a
function that's only available to strings.
Do you WANT a decimal point in the value or not? Your prompt to the
user just asks for "%". To most people that implies an integer like
"50" or "75" or "90" or "150". I don't know may people that would
recognize that you're asking for ".50" or ".75" or ".90" or "1.50".
>This is the logic that i am trying to work with, I am not understanding what you posted. I need to detect when a user puts a decimal and kick back to say only whole numbers are permitted.
That's exactly what my example does. You can replace the "split" with
this if it make more sense to you:
if ($increase -like "*.*" -or $increase like ".*" or -increase -like
"*.")
>When i am running my script i am having a "system.double" issue. I am assuming that i am comparing a number with a string.
>
>
>
>Error: Method invocation failed because [System.Double] doesn't contain a method named 'split'. At line:1 char:19 + $b = [int]$a.split <<<< (".") + CategoryInfo : InvalidOperation: (split:String) [], RuntimeExce ption + FullyQualifiedErrorId : MethodNotFound
That exception doesn't match the "DO..." you posted. There's no "$b"
variable there, nor is there a "$a" variable.
If you run the code sampe you posted you'd get this exception:
Method invocation failed because [System.Int32] doesn't contain a
method named 'split'.
$Increase is, after all, an integer not a string.
---
Rich Matheisen
MCSE+I, Exchange MVP
--- Rich Matheisen MCSE+I, Exchange MVP
Free Windows Admin Tool Kit Click here and download it now
August 29th, 2012 5:51pm
On Wed, 29 Aug 2012 19:46:03 +0000, RJB90 wrote:
>Can you help me with this: DO {[int]$Increase = Read-Host "Enter % Increase"; $p = $increase.split(".")} UNTIL ($p.length -gt 1)
If you're going to cast "$Increase" and an integer you'll never have a
decimal point in it. If ".5" is entered you'll get a zero as the
value. If they enter ".7" you'll get a "1" as a value. And becasue
it's an integer you'll never get "split" to work since that's a
function that's only available to strings.
Do you WANT a decimal point in the value or not? Your prompt to the
user just asks for "%". To most people that implies an integer like
"50" or "75" or "90" or "150". I don't know may people that would
recognize that you're asking for ".50" or ".75" or ".90" or "1.50".
>This is the logic that i am trying to work with, I am not understanding what you posted. I need to detect when a user puts a decimal and kick back to say only whole numbers are permitted.
That's exactly what my example does. You can replace the "split" with
this if it make more sense to you:
if ($increase -like "*.*" -or $increase like ".*" or -increase -like
"*.")
>When i am running my script i am having a "system.double" issue. I am assuming that i am comparing a number with a string.
>
>
>
>Error: Method invocation failed because [System.Double] doesn't contain a method named 'split'. At line:1 char:19 + $b = [int]$a.split <<<< (".") + CategoryInfo : InvalidOperation: (split:String) [], RuntimeExce ption + FullyQualifiedErrorId : MethodNotFound
That exception doesn't match the "DO..." you posted. There's no "$b"
variable there, nor is there a "$a" variable.
If you run the code sampe you posted you'd get this exception:
Method invocation failed because [System.Int32] doesn't contain a
method named 'split'.
$Increase is, after all, an integer not a string.
---
Rich Matheisen
MCSE+I, Exchange MVP
--- Rich Matheisen MCSE+I, Exchange MVP
August 29th, 2012 6:00pm
I would assume the same. I passed it by some colleagues and they recommended that if a decimal was inputted it generates an "Error" message. More of a sanity checker.
Thanks for your help.
Free Windows Admin Tool Kit Click here and download it now
August 29th, 2012 6:31pm